{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "scrolled": true,
    "jupyter": {
     "is_executing": true
    }
   },
   "source": [
    "import numpy as np \n",
    "import pandas as pd\n",
    "import lightgbm as lgb\n",
    "import random\n",
    "from sklearn import metrics\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "import os \n",
    "os.chdir('F:/安装包/PPD-First-Round-Data-Updated/PPD-First-Round-Data-Update/')\n",
    "import score_card as sc"
   ],
   "outputs": [],
   "execution_count": null
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:42.561213Z",
     "start_time": "2019-02-17T03:18:36.904108Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 161)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Master数据\n",
    "df1 = pd.read_csv('feature_select_data1.csv',encoding='gb18030')\n",
    "df1.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:54.458570Z",
     "start_time": "2019-02-17T03:18:42.566214Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 124)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 排序特征数据\n",
    "rank_df = pd.read_csv('rank_feature.csv',encoding='gbk')\n",
    "rank_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:57.831734Z",
     "start_time": "2019-02-17T03:18:54.461570Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 51)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# periods衍生特征数据\n",
    "periods_df = pd.read_csv('periods_feature.csv',encoding='gbk')\n",
    "periods_df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:57.837734Z",
     "start_time": "2019-02-17T03:18:57.833734Z"
    }
   },
   "outputs": [],
   "source": [
    "# 原生特征（不含排序特征和periods衍生特征）\n",
    "feature1 = list(df1.columns)\n",
    "# 排序特征和periods衍生特征\n",
    "feature2 = list(rank_df.columns)+list(periods_df.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:57.963735Z",
     "start_time": "2019-02-17T03:18:57.841734Z"
    }
   },
   "outputs": [],
   "source": [
    "# 对feature2进行随机打乱顺序\n",
    "random.shuffle(feature2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:58.129739Z",
     "start_time": "2019-02-17T03:18:57.964736Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 336)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 合并数据集\n",
    "df = pd.concat([df1,rank_df,periods_df],axis=1)\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:58.272747Z",
     "start_time": "2019-02-17T03:18:58.133739Z"
    }
   },
   "outputs": [],
   "source": [
    "# 保存用户id\n",
    "data_idx = df.Idx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:58.440757Z",
     "start_time": "2019-02-17T03:18:58.274747Z"
    }
   },
   "outputs": [],
   "source": [
    "# 定义lightgbm的bagging函数\n",
    "def bagging_lightgbm(feature_fraction,bagging_fraction,ramdom_seed,n_feature):\n",
    "    \n",
    "    select_fea = feature1+feature2[:n_feature]\n",
    "    \n",
    "    data = df.loc[:,select_fea]\n",
    "    train_x = data[data.sample_status=='train'].drop(['sample_status','target','Idx'],axis=1)\n",
    "    train_y = data[data.sample_status=='train']['target']\n",
    "    test_x = data[data.sample_status=='test'].drop(['sample_status','target','Idx'],axis=1)\n",
    "    test_y = data[data.sample_status=='test']['target']\n",
    "    \n",
    "    test_user_id = list(data[data.sample_status=='test']['Idx'])\n",
    "    \n",
    "    \n",
    "    dtrain = lgb.Dataset(train_x,train_y)\n",
    "    dtest = lgb.Dataset(test_x,test_y)\n",
    "    \n",
    "    params={\n",
    "        'boosting_type':'gbdt',\n",
    "        'metric':'auc',\n",
    "        'num_leaves':30,\n",
    "        'min_data_in_leaf':20,\n",
    "        'min_sum_hessian_in_leaf':0.001,\n",
    "        'bagging_fraction':bagging_fraction,\n",
    "        'feature_fraction':feature_fraction,\n",
    "        'learning_rate':0.005,\n",
    "    }\n",
    "    \n",
    "    #  寻找最佳的迭代次数\n",
    "    cv_result = lgb.cv(train_set=dtrain,\n",
    "                       early_stopping_rounds=10,\n",
    "                       num_boost_round=1000,\n",
    "                       nfold=5,\n",
    "                       metrics='auc',\n",
    "                       seed=0,\n",
    "                       params=params,\n",
    "                       stratified=True,\n",
    "                       shuffle=True)\n",
    "    max_auc = max(cv_result['auc-mean'])\n",
    "    num_round = len(cv_result['auc-mean'])\n",
    "    \n",
    "    model = lgb.train(train_set=dtrain,early_stopping_rounds=10,num_boost_round=num_round,valid_sets=dtest,params=params)\n",
    "    \n",
    "    model_pre = list(model.predict(test_x))\n",
    "    result_df = pd.DataFrame({'Idx':test_user_id,\n",
    "                              'score':model_pre})\n",
    "    return result_df\n",
    "\n",
    "# 对随机种子，bagging_fraction，feature_fraction及特征数量进行随机扰动\n",
    "random_seed = list(range(2018))\n",
    "bagging_fraction = [i/1000.0 for i in range(500,1000)]\n",
    "feature_fraction = [i/1000.0 for i in range(500,1000)]\n",
    "n_feature = list(range(50,174,2))\n",
    "\n",
    "random.shuffle(random_seed)\n",
    "random.shuffle(bagging_fraction)\n",
    "random.shuffle(feature_fraction)\n",
    "random.shuffle(n_feature)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-17T03:18:59.134796Z",
     "start_time": "2019-02-17T03:18:33.508Z"
    }
   },
   "outputs": [],
   "source": [
    "import time \n",
    "a=  time.time()\n",
    "result_df_list=[]\n",
    "# 建立30个子模型，保存各个子模型输出的结果\n",
    "for i in range(30):\n",
    "    result_df = bagging_lightgbm(feature_fraction=feature_fraction[i],\n",
    "                                 n_feature=n_feature[i],\n",
    "                                 ramdom_seed=random_seed[i],\n",
    "                                 bagging_fraction=bagging_fraction[i])\n",
    "    result_df_list.append(result_df)\n",
    "# 对30个子模型的结果average，得到bagging模型的最终结果\n",
    "prep_list = [list(x['prep']) for x in result_df_list]\n",
    "bagging_prep= list(np.sum(score_list,axis=0)/30)\n",
    "b = time.time()\n",
    "print('运行时间:{}'.format(round(b-a,0)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-02-16T14:41:12.488155Z",
     "start_time": "2019-02-16T14:41:12.313145Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# bagging模型的AUC\n",
    "test_y = list(df[df.sample_status=='test']['target'])\n",
    "sc.plot_roc(y_label=test_y,y_pred=ss)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
